home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / libogg / libvorbis-1.0rc3 / vq / vqgen.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-27  |  2.3 KB  |  86 lines

  1. /********************************************************************
  2.  *                                                                  *
  3.  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
  4.  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
  5.  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
  6.  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  7.  *                                                                  *
  8.  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
  9.  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
  10.  *                                                                  *
  11.  ********************************************************************
  12.  
  13.  function: build a VQ codebook 
  14.  last mod: $Id: vqgen.h,v 1.19 2001/12/20 01:00:40 segher Exp $
  15.  
  16.  ********************************************************************/
  17.  
  18. #ifndef _VQGEN_H_
  19. #define _VQGEN_H_
  20.  
  21. typedef struct vqgen{
  22.   int seeded;
  23.   int sorted;
  24.  
  25.   int it;
  26.   int elements;
  27.  
  28.   int aux;
  29.   float mindist;
  30.   int centroid;
  31.  
  32.   /* point cache */
  33.   float *pointlist; 
  34.   long   points;
  35.   long   allocated;
  36.  
  37.   /* entries */
  38.   float *entrylist;
  39.   long   *assigned;
  40.   float *bias;
  41.   long   entries;
  42.   float *max;
  43.   
  44.   float  (*metric_func) (struct vqgen *v,float *entry,float *point);
  45.   float *(*weight_func) (struct vqgen *v,float *point);
  46.  
  47.   FILE *asciipoints;
  48. } vqgen;
  49.  
  50. typedef struct {
  51.   long   min;       /* packed 24 bit float */       
  52.   long   delta;     /* packed 24 bit float */       
  53.   int    quant;     /* 0 < quant <= 16 */
  54.   int    sequencep; /* bitflag */
  55. } quant_meta;
  56.  
  57. static inline float *_point(vqgen *v,long ptr){
  58.   return v->pointlist+((v->elements+v->aux)*ptr);
  59. }
  60.  
  61. static inline float *_aux(vqgen *v,long ptr){
  62.   return _point(v,ptr)+v->aux;
  63. }
  64.  
  65. static inline float *_now(vqgen *v,long ptr){
  66.   return v->entrylist+(v->elements*ptr);
  67. }
  68.  
  69. extern void vqgen_init(vqgen *v,
  70.                int elements,int aux,int entries,float mindist,
  71.                float  (*metric)(vqgen *,float *, float *),
  72.                float *(*weight)(vqgen *,float *),int centroid);
  73. extern void vqgen_addpoint(vqgen *v, float *p,float *aux);
  74.  
  75. extern float vqgen_iterate(vqgen *v,int biasp);
  76. extern void vqgen_unquantize(vqgen *v,quant_meta *q);
  77. extern void vqgen_quantize(vqgen *v,quant_meta *q);
  78. extern void vqgen_cellmetric(vqgen *v);
  79.  
  80. #endif
  81.  
  82.  
  83.  
  84.  
  85.  
  86.